home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / qmgr / recipstate.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  3.4 KB  |  138 lines

  1. /* recipstate.c: support for qmgr responses */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/qmgr/RCS/recipstate.c,v 6.0 1991/12/18 20:23:58 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/qmgr/RCS/recipstate.c,v 6.0 1991/12/18 20:23:58 jpo Rel $
  9.  *
  10.  * $Log: recipstate.c,v $
  11.  * Revision 6.0  1991/12/18  20:23:58  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include "util.h"
  19. #include "qmgr.h"
  20.  
  21. #define STR2QB(s)    str2qb((s), strlen((s)), 1)
  22.  
  23. struct type_Qmgr_DeliveryStatus *deliverystate;
  24.  
  25. struct type_Qmgr_DeliveryStatus *delivery_setstate (rno, val, msg)
  26. int     rno, val;
  27. char    *msg;
  28. {
  29.     struct type_Qmgr_DeliveryStatus *ds;
  30.  
  31.     PP_DBG (("delivery_setstate (%d, %d)", rno, val));
  32.  
  33.     for (ds = deliverystate; ds; ds = ds -> next) {
  34.         if (ds -> IndividualDeliveryStatus -> recipient -> parm == rno) {
  35.             ds -> IndividualDeliveryStatus -> status = val;
  36.             if (msg) {
  37.                 if (ds -> IndividualDeliveryStatus -> info)
  38.                     qb_free (ds ->
  39.                          IndividualDeliveryStatus ->
  40.                          info);
  41.                 ds -> IndividualDeliveryStatus -> info =
  42.                     STR2QB (msg);
  43.             }
  44.         }
  45.     }
  46.     return deliverystate;
  47. }
  48.  
  49. struct type_Qmgr_DeliveryStatus *delivery_init (users)
  50. struct type_Qmgr_UserList *users;
  51. {
  52.     struct type_Qmgr_DeliveryStatus **ds;
  53.     struct type_Qmgr_IndividualDeliveryStatus *ids;
  54.  
  55.     PP_DBG (("delivery_init (users)"));
  56.  
  57.     if (deliverystate) {
  58.         free_Qmgr_DeliveryStatus (deliverystate);
  59.         deliverystate = NULL;
  60.     }
  61.  
  62.     for (ds = & deliverystate; users; users = users -> next,
  63.          ds = &(*ds)->next) {
  64.         *ds = (struct type_Qmgr_DeliveryStatus *)
  65.             calloc (1, sizeof (**ds));
  66.         ids = (*ds) -> IndividualDeliveryStatus =
  67.             (struct type_Qmgr_IndividualDeliveryStatus *)
  68.                 calloc (1, sizeof (struct type_Qmgr_IndividualDeliveryStatus));
  69.         ids -> recipient = (struct type_Qmgr_RecipientId *)
  70.             calloc (1, sizeof *ids -> recipient);
  71.         ids -> recipient -> parm = users -> RecipientId -> parm;
  72.         ids -> status = -1;
  73.         ids -> info = NULL;
  74.     }
  75.     return deliverystate;
  76. }
  77.  
  78. struct type_Qmgr_DeliveryStatus *delivery_setallstate (val, msg)
  79. int     val;
  80. char    *msg;
  81. {
  82.     struct type_Qmgr_DeliveryStatus *ds;
  83.     int    first = 1;
  84.  
  85.     PP_DBG (("delivery_setallstate (%d)", val));
  86.  
  87.     if (deliverystate == NULL)
  88.         return deliverystate;
  89.  
  90.     for (ds = deliverystate; ds; ds = ds -> next) {
  91.         switch (ds -> IndividualDeliveryStatus -> status) {
  92.             case int_Qmgr_status_negativeDR:
  93.             case int_Qmgr_status_positiveDR:
  94.             case int_Qmgr_status_successSharedDR:
  95.             case int_Qmgr_status_failureSharedDR:
  96.             break;
  97.             default:
  98.             ds -> IndividualDeliveryStatus -> status = val;
  99.             if (msg && val == int_Qmgr_status_mtaFailure &&
  100.                 first) {
  101.                 if (ds -> IndividualDeliveryStatus -> info)
  102.                     qb_free (ds -> IndividualDeliveryStatus
  103.                          -> info);
  104.                 ds -> IndividualDeliveryStatus -> info =
  105.                     STR2QB (msg);
  106.                 first = 0;
  107.             }
  108.             break;
  109.         }
  110.     }
  111.     return deliverystate;
  112. }
  113.  
  114. struct type_Qmgr_DeliveryStatus *delivery_resetDRs (val)
  115. int     val;
  116. {
  117.     struct type_Qmgr_DeliveryStatus *ds;
  118.  
  119.     PP_DBG (("delivery_resetDRs (%d)", val));
  120.  
  121.     if (deliverystate == NULL)
  122.         return deliverystate;
  123.  
  124.     for (ds = deliverystate; ds; ds = ds -> next) {
  125.         switch (ds -> IndividualDeliveryStatus -> status) {
  126.             case int_Qmgr_status_negativeDR:
  127.             case int_Qmgr_status_positiveDR:
  128.             case int_Qmgr_status_successSharedDR:
  129.             case int_Qmgr_status_failureSharedDR:
  130.             ds -> IndividualDeliveryStatus -> status = val;
  131.             break;
  132.             default:
  133.             break;
  134.         }
  135.     }
  136.     return deliverystate;
  137. }
  138.